package fr.thelem.gestiondemandesthelem.service.impl;

import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import fr.thelem.gestiondemandesthelem.service.exceptions.BackupException;
import fr.thelem.gestiondemandesthelem.service.IBackupProcess;

/**
 * Service de sauvegarde des données importées.
 */
public class BackupProcess implements IBackupProcess, Serializable {

    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 4774140300005205015L;

    /**
     * Le logger de la classe.
     */
    private static final Log LOGGER = LogFactory.getLog(BackupProcess.class);

    @Override
    public void sauvegarderFichier(final String path, final File fichier, final String fichierFileName) throws BackupException {
        LOGGER.info("Sauvegarde du fichier [" + String.valueOf(fichierFileName) + "]");

        File destFile = new File(path + fichierFileName);
        File directory = new File(path);
        try {

            FileUtils.forceMkdir(directory);
            if (LOGGER.isDebugEnabled()) {
                if (path != null && fichierFileName != null) {
                    LOGGER.debug("Sauvegarde du fichier [" + destFile + "]");
                }

            }
            FileUtils.copyFile(fichier, destFile, false);
        } catch (IOException e) {
            throw new BackupException("Exception de backup de fichier", e);
        }

    }

    @Override
    public String extraireExtension(final String nomFichier) {
        return FilenameUtils.getExtension(nomFichier);
    }

    @Override
    public String creerNomFichier(String typeFichier, String nomFichierPourExtension, String nomUtilisateur) {
        String extension = extraireExtension(nomFichierPourExtension);
        String date = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
        String nomFichierBackup = date + "_" + typeFichier + "_" + nomUtilisateur + "." + extension;
        return nomFichierBackup;
    }

}
